import unittest
from Lib.HTMLTestRunner import HTMLTestRunner

from CalcMathFunctionUnitTest03 import MyTestCaseTest
import CalcMathFunctionUnitTest03
from BeautifulReport import BeautifulReport as bf

"""
    测试 单元测试工具中 unittest中 的 测试报告 输出的 使用
"""
"""
    想要使用 测试报告：
    1、使用 txt 文件进行输出
    2、 使用 Html 方式输出
        1、官方提供的报告模板
        2、第三方 
"""

if __name__ == '__main__':
    """
        想要将  MyTestCase 模块中的 四个方法在运行时 按照我自己规定顺序来运行
        1、需要使用测试集
    """
    # 创建好了一个 测试集
    suite = unittest.TestSuite()

    # 通过 测试集添加某一个 模块中的 多个 测试方法  让其 按照特定的顺序去执行

    tests = [
        MyTestCaseTest('test_add'),
        MyTestCaseTest('test_less'),
        MyTestCaseTest('test_multiply'),
        MyTestCaseTest('test_divide'),
    ]

    suite.addTests(tests)
    suite.addTest(MyTestCaseTest('test_add'))

    # 通过 测试集添加某一个 模块中的 所有 测试方法  通过模块的 路径来添加
    suite.addTests(unittest.TestLoader().loadTestsFromName("CalcMathFunctionUnitTest03.MyTestCaseTest"))
    suite.addTests(unittest.TestLoader().loadTestsFromNames(
        ["CalcMathFunctionUnitTest03.MyTestCaseTest",
         "CalcMathFunctionUnitTest03.MyTestCaseTest",
         ]
    ))

    # # 通过 测试集添加某一个 模块中的 所有 测试方法  通过模块名添加
    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(MyTestCaseTest))

    # 通过 文件名 来解析 文件下的 所有的模块
    suite.addTests(unittest.TestLoader().loadTestsFromModule(module=CalcMathFunctionUnitTest03))

    # 测试 报告的 生成
    #  1. 使用 txt 产生报告   不常用
    # reporter_file_path = open(file='CalcMathFunctionUnitTestReporter09_txt.txt', mode='a')
    # runner = unittest.TextTestRunner(verbosity=2, stream=reporter_file_path)
    # runner.run(suite)

    # 2. 使用 官方的 报告  来产生 测试结果
    # 下载模块 ： BeautifulReport
    runner = bf(suite)
    runner.report("计算器的测试用例", filename='CalcMathFunctionUnitTestReporter09_html.html')

    #  代码格式化 ： CTRL+ alt + l

    runner = HTMLTestRunner(stream='EcShopRegisterUnitTest_Reporter_02.html', verbosity=2)
    runner.run(suite)